home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2001 May / SGI Freeware 2001 May - Disc 2.iso / dist / fw_netpbm.idb / usr / freeware / include / pam.h.z / pam.h
C/C++ Source or Header  |  2001-01-10  |  5KB  |  138 lines

  1. /*----------------------------------------------------------------------------
  2.    These are declarations for use with the Portable Arbitrary Map (PAM)
  3.    format and the Neptbm library functions specific to them.
  4. -----------------------------------------------------------------------------*/
  5.  
  6. #include "pnm.h"
  7.  
  8. typedef unsigned long sample;
  9.  
  10. struct pam {
  11. /* This structure describes an open PAM image file.  It consists
  12.    entirely of information that belongs in the header of a PAM image
  13.    and filesystem information.  It does not contain any state
  14.    information about the processing of that image.  
  15.  
  16.    This is not considered to be an opaque object.  The user of Netbpm
  17.    libraries is free to access and set any of these fields whenever
  18.    appropriate.  The structure exists to make coding of function calls
  19.    easy.
  20. */
  21.  
  22.     /* 'size' and 'len' are necessary in order to provide forward and
  23.        backward compatibility between library functions and calling programs
  24.        as this structure grows.
  25.        */
  26.     int size;   /* The storage size of this entire structure, in bytes */
  27.     int len;    
  28.         /* The length, in bytes, of the information in this structure.
  29.            The information starts in the first byte and is contiguous.  
  30.            This cannot be greater than 'size'
  31.            */
  32.     FILE *file;
  33.     int format;
  34.         /* The format code of the raw image.  This is PAM_FORMAT
  35.            unless the PAM image is really a view of a PBM, PGM, or PPM
  36.            image.  Then it's PBM_FORMAT, RPBM_FORMAT, etc.
  37.            */
  38.     int plainformat;
  39.         /* Logical:  the format above is a plain (text) format as opposed
  40.            to a raw (binary) format.  This is entirely redundant with the
  41.            'format' member and exists as a separate member only for 
  42.            computational speed.
  43.            */
  44.     int height;  /* Height of image in rows */
  45.     int width;   /* Width of image in number of columns (tuples per row) */
  46.     int depth;   /* Depth of image (number of samples in each tuple). */
  47.     sample maxval;  /* Maximum defined value for a sample */
  48.     int bytes_per_sample;  
  49.         /* Number of bytes used to represent each sample in the image file.
  50.            Note that this is strictly a function of 'maxval'.  It is in a
  51.            a separate member for computational speed.
  52.            */
  53.     char tuple_type[256];
  54.         /* The tuple type string from the image header.  Netpbm does 
  55.            not define any values for this except the following, which are
  56.            used for a PAM image which is really a view of a PBM, PGM,
  57.            or PPM image:  PAM_PBM_TUPLETYPE, PAM_PGM_TUPLETYPE, 
  58.            PAM_PPM_TUPLETYPE.
  59.            */
  60. };
  61.  
  62. #define PAM_PBM_TUPLETYPE "BLACKANDWHITE"
  63. #define PAM_PGM_TUPLETYPE "GRAYSCALE"
  64. #define PAM_PPM_TUPLETYPE "RGB"
  65.  
  66. #define PAM_PBM_BLACK 0
  67. #define PAM_PBM_WHITE 1
  68.     /* These are values of samples in a PAM image that represents a black
  69.        and white bitmap image.  They are the values of black and white,
  70.        respectively.  For example, if you use pnm_readpamrow() to read a
  71.        row from a PBM file, the black pixels get returned as 
  72.        PAM_PBM_BLACK.
  73.     */
  74.  
  75.  
  76. typedef sample *tuple;  
  77.     /* A tuple in a PAM.  This is an array such that tuple[i-1] is the
  78.        ith sample (element) in the tuple.  It's dimension is the depth
  79.        of the image (see pam.depth above).
  80.        */
  81.  
  82. #define PAM_OVERALL_MAXVAL ULONG_MAX
  83.  
  84. #define PAM_MAGIC1 'P'
  85. #define PAM_MAGIC2 '7'
  86. #define PAM_FORMAT (PAM_MAGIC1 * 256 + PAM_MAGIC2)
  87. #define PAM_TYPE PAM_FORMAT
  88.  
  89. /* Macro for turning a format number into a type number. */
  90.  
  91. #define PAM_FORMAT_TYPE(f) ((f) == PAM_FORMAT ? PAM_TYPE : PPM_FORMAT_TYPE(f))
  92.  
  93. /* Declarations of library functions. */
  94.  
  95. /* We don't have a specific PAM function for init and nextimage, because
  96.    one can simply use pnm_init() and pnm_nextimage() from pnm.h.
  97. */
  98.  
  99. #define pnm_allocpamtuple(pamP) \
  100.     ((tuple) pm_allocrow(1, (pamP)->depth*sizeof(sample)))
  101.  
  102. #define pnm_freepamtuple(tuple) pm_freerow((char*) tuple)
  103.  
  104. tuple *
  105. pnm_allocpamrow(struct pam * const pamP);
  106.  
  107. #define pnm_freepamrow(tuplerow) pm_freerow((char*) tuplerow)
  108.  
  109. tuple **
  110. pnm_allocpamarray(struct pam * const pamP);
  111.  
  112. void
  113. pnm_freepamarray(tuple ** const tuplearray, struct pam * const pamP);
  114.  
  115. void 
  116. pnm_readpaminit(FILE *file, struct pam * const pamP, const int size);
  117.  
  118. void 
  119. pnm_readpamrow(struct pam * const pamP, tuple* const tuplerow);
  120.  
  121. tuple** 
  122. pnm_readpam(FILE *file, struct pam * const pamP, const int size);
  123.  
  124. void 
  125. pnm_writepaminit(struct pam * const pamP);
  126.  
  127. void 
  128. pnm_writepamrow(struct pam * const pamP, const tuple * const tuplerow);
  129.  
  130. void 
  131. pnm_writepam(struct pam * const pamP, const tuple * const * const tuplearray);
  132.  
  133. void
  134. pnm_checkpam(struct pam * const pamP, const enum pm_check_type check_type, 
  135.              enum pm_check_code * const retvalP);
  136.  
  137.  
  138.